package com.cmc.cloud.cmclink.doc.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.cmc.cloud.cmclink.doc.api.document.rep.EqmInfoRequirementRespDto;
import com.cmc.cloud.cmclink.doc.api.document.rep.EqmInfoSearchRespDto;
import com.cmc.cloud.cmclink.doc.api.document.rep.SoStatusCountVO;
import com.cmc.cloud.cmclink.doc.api.document.req.so.EqmInfoSearchReqDto;
import com.cmc.cloud.cmclink.doc.api.document.req.so.SoCountDTO;
import com.cmc.cloud.cmclink.doc.api.document.req.so.SoPageReqDto;
import com.cmc.cloud.cmclink.doc.dto.VgmTelAndEmailInfoDto;
import com.cmc.cloud.cmclink.doc.entity.SoDO;
import com.cmc.cloud.cmclink.doc.vo.manifestvo.manifest.ManifestSoPageReqVO;
import com.cmc.cloud.cmclink.doc.vo.sovo.sovo.*;
import com.cmes.framework.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 订舱主 Mapper
 *
 * @author 招商轮船-管理员
 */
@Mapper
public interface SoMapper extends BaseMapperX<SoDO> {
    /**
     * 列表分页查询
     *
     * @param page  查询条件
     * @param reqVo 查询条件
     * @return 分页结果
     */
    IPage<SoDO> selectPageList(IPage<SoDO> page, @Param("reqVo") SoPageReqVO reqVo);

    /**
     * 列表分页查询
     *
     * @param page  查询条件
     * @param reqVo 查询条件
     * @return 分页结果
     */
    IPage<SoRespVO> getSoPageAmend(IPage<SoRespVO> page, @Param("reqVo") SoPageReqVO reqVo);

    /**
     * RPC SO信息查询
     *
     * @param page
     * @param soPageReqDto
     * @return
     */
    IPage<SoDO> rpcQuerySoInfo(IPage<SoDO> page, @Param("soPageReqDto") SoPageReqDto soPageReqDto);

    /**
     * 列表分页查询
     *
     * @param page  查询条件
     * @param reqVo 查询条件
     * @return 分页结果
     */
    IPage<SoRespVO> getSoManifest(IPage<SoRespVO> page, @Param("reqVo") ManifestSoPageReqVO reqVo);

    /**
     * RPC SO 全量箱数据统计第一步获取SOID
     *
     * @param soPageReqDto arg
     * @return List<SoDO>
     */
    List<SoDO> rpcQuerySoCntrInfo(@Param("soPageReqDto") SoPageReqDto soPageReqDto);

    /**
     * 统计订单数量
     *
     * @param soCountDTO SoCountDTO
     * @return List<SoStatusCountVO>
     */
    List<SoStatusCountVO> countSoStatus(@Param("dto") SoCountDTO soCountDTO);

    /**
     * 箱管预配箱信息查询
     *
     * @param reqVo
     * @return
     */
    List<EqmInfoSearchRespDto> rpcEqmSoForecastInfo(@Param("reqVo") EqmInfoSearchReqDto reqVo);

    /**
     * 获取订舱要求
     *
     * @param requireTypeCode
     * @param blNos
     * @return
     */
    List<EqmInfoRequirementRespDto> getSoRequirementInfo(@Param("requireTypeCode") String requireTypeCode, @Param("blNos") List<String> blNos);

    /**
     * 查询发货人电话和邮箱
     *
     * @param blnos
     * @return
     */
    List<VgmTelAndEmailInfoDto> selectTelAndEmailSoInfo(@Param("blnos") List<String> blnos);

    /**
     * 查询订舱监控报表
     *
     * @param req
     * @return
     */
    List<SoBsaSecondCountVO> querySoBsaSecondCount(@Param("req") SoBsaCountReqVO req);

    /**
     * 查询订舱监控报表
     *
     * @param req
     * @return
     */
    List<SoBsaCustomerCountVO> querySoBsaCustomerCount(@Param("req") SoBsaCountReqVO req);
}
